/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ar.com.s21.poo.controller;

import ar.com.s21.poo.dao.UsuarioDAO;
import ar.com.s21.poo.exception.GestionarException;
import ar.com.s21.poo.model.TipoUsuario;
import ar.com.s21.poo.model.Usuario;
import ar.com.s21.poo.util.UtilityClass;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import javax.swing.JComboBox;

/**
 *
 * @author pgomez
 */
public class UsuarioControlador {
    
    private UsuarioDAO usuarioDAO;
    
    public UsuarioControlador(){
        usuarioDAO = new UsuarioDAO();
    }

    /**
     *
     * @param userName
     * @param password
     * @param tipoUsuario
     * @throws SQLException
     * @throws GestionarException
     */
    public void validarUsuario(String userName, String password, String tipoUsuario) 
            throws SQLException, GestionarException {
        usuarioDAO.validarUsuario(userName, password, tipoUsuario);
    }

    /**
     *
     * @param nombre
     * @param apellido
     * @param dni
     * @param domicilio
     * @param diaNacimiento
     * @param mesNacimiento
     * @param anioNacimiento
     * @param telefonoParticular
     * @param telCelular
     * @param nombreUsuario
     * @param password
     * @param tipUsuario
     * @return
     * @throws SQLException
     * @throws GestionarException
     */
    public boolean crearUsuario(String nombre, String apellido,String dni, String domicilio, String diaNacimiento, String mesNacimiento, String anioNacimiento, String telefonoParticular, String telCelular, String nombreUsuario, String password, String tipUsuario) throws SQLException, GestionarException {
        TipoUsuario tipoUsuario = null;
                
                switch(tipUsuario){
                    case "administrador":  tipoUsuario= new TipoUsuario(tipUsuario);
                                            tipoUsuario.setIdTipoUsuario(1);
                        break;
                    case "cliente": tipoUsuario = new TipoUsuario(tipUsuario);
                                            tipoUsuario.setIdTipoUsuario(2);
                        break;
                    case "vendedor": tipoUsuario = new TipoUsuario(tipUsuario);
                                            tipoUsuario.setIdTipoUsuario(3);
                        break;
                }
                
         Date dateNacimiento = UtilityClass.createDate(diaNacimiento, mesNacimiento, anioNacimiento);
         java.sql.Date fechaNacimiento = (java.sql.Date) UtilityClass.convertToSqlDate(dateNacimiento);
         
         Usuario usuario = new Usuario(nombreUsuario, password, nombre, apellido,dni, domicilio, telefonoParticular, telCelular, (java.sql.Date)UtilityClass.convertToSqlDate(new Date()),fechaNacimiento , tipoUsuario);
         return usuarioDAO.add(usuario);
                
                
               
    }
    
    /**
     *
     * @param nombreUsuario
     * @param tipoUsuario
     * @return
     * @throws SQLException
     * @throws GestionarException
     */
    public boolean existeNombreUsuario(String nombreUsuario, String tipoUsuario) throws SQLException, GestionarException {
        
         return usuarioDAO.existeNombreUsuario(nombreUsuario, tipoUsuario);
                
                
               
    }
    
    /**
     *
     * @param dni
     * @return
     * @throws GestionarException
     */
    public Usuario buscarPorDni(String dni) throws GestionarException{
        return usuarioDAO.buscarPorDNI(dni);
    }

    /**
     *
     * @param usuario
     * @param tipoUsuario
     * @param password
     * @param passwordrepetido
     * @throws GestionarException
     */
    public void actualizarPassword(String usuario, String tipoUsuario, String password, String passwordrepetido) throws GestionarException {
        usuarioDAO.actualizarPassword(usuario,tipoUsuario,password,passwordrepetido);
    }

    /**
     *
     * @param nombre
     * @param apellido
     * @param domicilio
     * @param dni
     * @param isActivo
     * @param diaNacimiento
     * @param mesNacimiento
     * @param anioNacimiento
     * @param telefonoParticular
     * @param telCelular
     * @param tipUsuario
     * @throws GestionarException
     * @throws SQLException
     */
    public void actualizarUsuario(String nombre, String apellido, String domicilio,String dni,boolean isActivo, String diaNacimiento, String mesNacimiento, String anioNacimiento,
            String telefonoParticular, String telCelular, String tipUsuario) throws GestionarException, SQLException {
            
        Usuario u = new Usuario();
        u.setNombre(nombre);
        u.setApellido(apellido);
        u.setDomicilio(domicilio);
        u.setActivo(isActivo);
        
        Date dateNacimiento = UtilityClass.createDate(diaNacimiento, mesNacimiento, anioNacimiento);
         java.sql.Date fechaNacimiento = (java.sql.Date) UtilityClass.convertToSqlDate(dateNacimiento);
        
        u.setFecha_nacimiento(fechaNacimiento);
        u.setTel_particular(telefonoParticular);
        u.setTel_celular(telCelular);
        u.setDni(dni);
        
        
        
        TipoUsuario tipoUsuario = null;
                
                switch(tipUsuario){
                    case "Administrador":  tipoUsuario= new TipoUsuario(tipUsuario);
                                            tipoUsuario.setIdTipoUsuario(0);
                        break;
                    case "Cliente": tipoUsuario = new TipoUsuario(tipUsuario);
                                            tipoUsuario.setIdTipoUsuario(1);
                        break;
                    case "Vendedor": tipoUsuario = new TipoUsuario(tipUsuario);
                                            tipoUsuario.setIdTipoUsuario(2);
                        break;
                }
        
        u.setTipoUsuario(tipoUsuario);
         
        
        usuarioDAO.update(u);
            
    }
    
    /**
     *
     * @return
     * @throws SQLException
     */
    public List<Usuario> obtenerListaVendedores() throws SQLException{
        return usuarioDAO.listarVendedores();
    }
    
    
    /**
     *
     * @param comboClientes
     * @throws SQLException
     */
    public void obtenerListaClientes(JComboBox comboClientes) throws SQLException{
        
                  
            for (ar.com.s21.poo.model.Usuario usuario : usuarioDAO.listarClientes()) {
                comboClientes.addItem(usuario.getApellidoYNombre());
            }
    }

    /**
     *
     * @param comboVendedores
     * @throws SQLException
     */
    public void obtenerListaVendedores(JComboBox comboVendedores) throws SQLException{
        
                  
            for (ar.com.s21.poo.model.Usuario usuario : usuarioDAO.listarVendedores()) {
                comboVendedores.addItem(usuario.getApellidoYNombre());
            }
    }

    Usuario obtenerClientePorNombreYApellido(String cliente) throws SQLException {
                
                String[] parts = cliente.split(",");
                String nombre = parts[0]; 
                String apellido = parts[1];
                return usuarioDAO.getClientePorNombreYApellido(nombre.trim(),apellido.trim());
                
    }

    Usuario obtenerVendedorPorNombreYApellido(String vendedor) throws SQLException {
                String[] parts = vendedor.split(",");
                String nombre = parts[0]; 
                String apellido = parts[1];
                return usuarioDAO.getVendedorPorNombreYApellido(nombre.trim(),apellido.trim());
    }


}